using System;
using Server;
using Server.Mobiles;
using Server.Items;

namespace Server.Engines.Quests.Ambitious
{
	public class KillQueensObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				// Kill 5 red/black solen queens.
				return ((AmbitiousQueenQuest)System).RedSolen ? 1054062 : 1054063;
			}
		}

		public override int MaxProgress{ get{ return 5; } }

		public KillQueensObjective()
		{
		}

		public override void RenderProgress( BaseQuestGump gump )
		{
			if ( !Completed )
			{
				// Red/Black Solen Queens killed:
				gump.AddHtmlLocalized( 70, 260, 270, 100, ((AmbitiousQueenQuest)System).RedSolen ? 1054064 : 1054065, BaseQuestGump.Blue, false, false );
				gump.AddLabel( 70, 280, 0x64, CurProgress.ToString() );
				gump.AddLabel( 100, 280, 0x64, "/" );
				gump.AddLabel( 130, 280, 0x64, MaxProgress.ToString() );
			}
			else
			{
				base.RenderProgress( gump );
			}
		}

		public override bool IgnoreYoungProtection( Mobile from )
		{
			if ( Completed )
				return false;

			bool redSolen = ((AmbitiousQueenQuest)System).RedSolen;

			if ( redSolen )
				return from is RedSolenQueen;
			else
				return from is BlackSolenQueen;
		}

		public override void OnKill( BaseCreature creature, Container corpse )
		{
			bool redSolen = ((AmbitiousQueenQuest)System).RedSolen;

			if ( redSolen )
			{
				if ( creature is RedSolenQueen )
					CurProgress++;
			}
			else
			{
				if ( creature is BlackSolenQueen )
					CurProgress++;
			}
		}

		public override void OnComplete()
		{
			System.AddObjective( new ReturnAfterKillsObjective() );
		}
	}

	public class ReturnAfterKillsObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				/* You've completed your task of slaying solen queens. Return to
				 * the ambitious queen who asked for your help.
				 */
				return 1054067;
			}
		}

		public ReturnAfterKillsObjective()
		{
		}

		public override void OnComplete()
		{
			System.AddConversation( new GatherFungiConversation() );
		}
	}

	public class GatherFungiObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				/* Gather zoogi fungus until you have 50 of them, then give them
				 * to the ambitious queen you are helping.
				 */
				return 1054069;
			}
		}

		public GatherFungiObjective()
		{
		}

		public override void OnComplete()
		{
			System.AddConversation( new EndConversation() );
		}
	}

	public class GetRewardObjective : QuestObjective
	{
		public override object Message
		{
			get
			{
				// Return to the ambitious solen queen for your reward.
				return 1054148;
			}
		}

		private bool m_BagOfSending;
		private bool m_PowderOfTranslocation;
		private bool m_Gold;

		public bool BagOfSending{ get{ return m_BagOfSending; } set{ m_BagOfSending = value; } }
		public bool PowderOfTranslocation{ get{ return m_PowderOfTranslocation; } set{ m_PowderOfTranslocation = value; } }
		public bool Gold{ get{ return m_Gold; } set{ m_Gold = value; } }

		public GetRewardObjective( bool bagOfSending, bool powderOfTranslocation, bool gold)
		{
			m_BagOfSending = bagOfSending;
			m_PowderOfTranslocation = powderOfTranslocation;
			m_Gold = gold;
		}

		public GetRewardObjective()
		{
		}

		public override void OnComplete()
		{
			System.AddConversation( new End2Conversation() );
		}

		public override void ChildDeserialize( GenericReader reader )
		{
			int version = reader.ReadEncodedInt();

			m_BagOfSending = reader.ReadBool();
			m_PowderOfTranslocation = reader.ReadBool();
			m_Gold = reader.ReadBool();
		}

		public override void ChildSerialize( GenericWriter writer )
		{
			writer.WriteEncodedInt( (int) 0 ); // version

			writer.Write( (bool) m_BagOfSending );
			writer.Write( (bool) m_PowderOfTranslocation );
			writer.Write( (bool) m_Gold );
		}
	}
}